package com.efast.dmom.mes.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.efast.dmom.mes.dao.entity.WmsEquipSpareStorageDao;
import com.efast.dmom.mes.entity.EquipSpareStorageEntity;
import com.efast.dmom.mes.service.WmsEquipSpareStorageService;
import com.efast.dmom.mes.util.SpringWebUtils;
import com.efast.dmom.mes.util.TimeUtil;

@Service
@Transactional
public class WmsEquipSpareStorageServiceImpl implements WmsEquipSpareStorageService {
	
	@Autowired
	private WmsEquipSpareStorageDao wmsEquipSpareStorageDao;

	@Override
	public void increaseSpareStorage(List<EquipSpareStorageEntity> inboundList) {
		 List<EquipSpareStorageEntity> updateList = new ArrayList<EquipSpareStorageEntity>();
    	 List<EquipSpareStorageEntity> saveList = new ArrayList<EquipSpareStorageEntity>();
    	 List<EquipSpareStorageEntity> deleteList = new ArrayList<EquipSpareStorageEntity>();
         for (EquipSpareStorageEntity data:inboundList) {
        	 EquipSpareStorageEntity entity = null;
        	 if (data.isFlag()) {
        	 entity = wmsEquipSpareStorageDao.getSpareStorageBySpareIdAndWarehouseId(data.getSpareId(),data.getWarehouseId());
        	 } else {
        	 entity = wmsEquipSpareStorageDao.getSpareStorageBySpareId(data.getSpareId());	 
        	 }
        	 // 计算确认数据的总金额
        	 if (entity != null) {
        		data.setLastModifiedTime(TimeUtil.getLocalDateTime()); 
        		data.setLastModifier(SpringWebUtils.getRequestUser());
        		data.setStorageQuality(entity.getStorageQuality()+data.getStorageQuality());
        		data.setId(entity.getId());
        		data.setTotalAmount(data.getTotalAmount() + entity.getTotalAmount());
        		updateList.add(data);
        	 } else {
         		if (data.getSpareCategory().equals("刀具") && data.getCutterType().equals("刀具-有编号")) {
         			EquipSpareStorageEntity deleteEntity = wmsEquipSpareStorageDao.getSpareStorageById(data.getSpareId());
            		if (deleteEntity != null) {
            			EquipSpareStorageEntity entity1 = new EquipSpareStorageEntity();
            			entity1.setId(deleteEntity.getId());
            			entity1.setLastModifiedTime(TimeUtil.getLocalDateTime()); 
            			entity1.setLastModifier(SpringWebUtils.getRequestUser());
            			deleteList.add(entity1);
            		}
            	 }
        		 data.setCreationTime(TimeUtil.getLocalDateTime());
        		 data.setCreator(SpringWebUtils.getRequestUser());
        		 data.setCompanyCode(SpringWebUtils.getRequestCompany());
        		 data.setTotalAmount(data.getTotalAmount());
        		 saveList.add(data);
        	 }
         }
         if (updateList != null && updateList.size() >0) {
        	 wmsEquipSpareStorageDao.updateBatch(updateList); 
         }
         if (saveList != null && saveList.size() > 0) {
        	 wmsEquipSpareStorageDao.saveBatch(saveList);
         }
         if (deleteList != null && deleteList.size() > 0) {
        	 wmsEquipSpareStorageDao.deleteById(deleteList);
         }
	}

	@Override
	public int getStorageQtyBySpareIdAndWarehouseId(long spareId, long warehouseId) {
		EquipSpareStorageEntity entity = wmsEquipSpareStorageDao.getSpareStorageBySpareIdAndWarehouseId(spareId,warehouseId);
		if (entity == null) {
			return 0;
		} else {
			return entity.getStorageQuality();
		}
		
	}

	@Override
	public void decreaseSpareStorage(List<EquipSpareStorageEntity> outboundList) {
		List<EquipSpareStorageEntity> updateList = new ArrayList<EquipSpareStorageEntity>();
        for (EquipSpareStorageEntity data:outboundList) {
       	 EquipSpareStorageEntity entity = wmsEquipSpareStorageDao.getSpareStorageBySpareIdAndWarehouseId(data.getSpareId(),data.getWarehouseId());
       	 if (entity != null) {
       		data.setLastModifiedTime(TimeUtil.getLocalDateTime()); 
       		data.setLastModifier(SpringWebUtils.getRequestUser());
       		data.setStorageQuality(entity.getStorageQuality()-data.getStorageQuality());
       		data.setTotalAmount(entity.getTotalAmount() - data.getTotalAmount());
       		data.setId(entity.getId());
       		updateList.add(data);
       	   }
          }
        if (updateList != null && updateList.size() >0) {
       	 wmsEquipSpareStorageDao.updateBatch(updateList); 
        }
	}

}
